# -*- coding: utf-8 -*-
from common import orm
from common.lottery.cyclical.cp11x5.model import BET_TYPE
from common.utils.types import Enum


class Order(orm.Model):
    __tablename__ = "sd_11x5_order"
    id = orm.Column(orm.BigInteger, primary_key=True)
    user_id = orm.Column(orm.BigInteger)
    track_id = orm.Column(orm.BigInteger)  # 每次追号会产生一个ID，普通的为null
    type = orm.Column(orm.SmallInteger)  # 订单类型
    term = orm.Column(orm.VARCHAR)  # 期号
    bet_type = orm.Column(orm.Integer)  # 押宝方式，见上面的枚举
    unit = orm.Column(orm.FLOAT, default=2)  # 用户自选的每注金额
    number = orm.Column(orm.VARCHAR)  # 用户购买数据，格式和bet_type有关
    price = orm.Column(orm.FLOAT)  # 总价
    status = orm.Column(orm.Integer)  # 订单状态
    track_status = orm.Column(orm.Integer)  # 追号状态
    times = orm.Column(orm.Integer, default=1)  # 倍数
    win_price = orm.Column(orm.FLOAT, default=0)  # 中奖金额
    bonus = orm.Column(orm.FLOAT, default=0)
    extend = orm.Column(orm.TEXT)
    created_at = orm.Column(orm.DATETIME)
    updated_at = orm.Column(orm.DATETIME)


# 描述及排序
BET_TYPE_DESC = (
    # (BET_TYPE.ONE_ANY, u"至少选1个号，猜对任意1个开奖号即中<font color=#ff00000>2.72%s</font>元"),
    (BET_TYPE.TWO_ANY, u"至少选2个号，猜对任意2个开奖号即中<font color=#ff00000>6%s</font>元"),
    (BET_TYPE.THREE_ANY, u"至少选3个号，猜对任意3个开奖号即中<font color=#ff00000>19%s</font>元"),
    (BET_TYPE.FOUR_ANY, u"至少选4个号，猜对任意4个开奖号即中<font color=#ff00000>78%s</font>元"),
    (BET_TYPE.FIVE_ANY, u"至少选5个号，猜对全部5个开奖号即中<font color=#ff00000>540%s</font>元"),
    (BET_TYPE.SIX_ANY, u"至少选6个号，选号包含5个开奖号即中<font color=#ff00000>90%s</font>元"),
    (BET_TYPE.SEVEN_ANY, u"至少选7个号，选号包含5个开奖号即中<font color=#ff00000>26%s</font>元"),
    (BET_TYPE.EIGHT_ANY, u"至少选8个号，选号包含5个开奖号即中<font color=#ff00000>9%s</font>元"),
    (BET_TYPE.ONE_FRONT, u"至少选1个号，猜对第1个开奖号即中<font color=#ff00000>13%s</font>元"),
    (BET_TYPE.TWO_FRONT_DIRECT, u"每位至少选1个号（不能相同），按位猜对开奖号前2位中<font color=#ff00000>130%s</font>元"),
    (BET_TYPE.TWO_FRONT_GROUP, u"至少选2个号，猜对前2个开奖号即中<font color=#ff00000>65%s</font>元"),
    (BET_TYPE.THREE_FRONT_DIRECT, u"每位至少选1个号（不能相同），按位猜对开奖号前3位中<font color=#ff00000>1170%s</font>元"),
    (BET_TYPE.THREE_FRONT_GROUP, u"至少选3个号，猜对前3个开奖号即中<font color=#ff00000>195%s</font>元"),
)


def get_avaliable_bet_type():
    _list = []
    for index, (bet_type, desc) in enumerate(BET_TYPE_DESC):
        _list.append({
            "id": index + 1,
            "title": BET_TYPE.get_label(bet_type),
            "play_id": bet_type,
            "des": desc,
            "rule": "",
            "support": 1
        })
    return _list


BET_TYPE_DESC_V3 = (
    # (BET_TYPE.ONE_ANY, u"至少选1个号，猜对任意1个开奖号即中奖"),
    (BET_TYPE.TWO_ANY, u"至少选2个号，猜对任意2个开奖号即中奖"),
    (BET_TYPE.THREE_ANY, u"至少选3个号，猜对任意3个开奖号即中奖"),
    (BET_TYPE.FOUR_ANY, u"至少选4个号，猜对任意4个开奖号即中奖"),
    (BET_TYPE.FIVE_ANY, u"至少选5个号，猜对全部5个开奖号即中奖"),
    (BET_TYPE.SIX_ANY, u"至少选6个号，选号包含5个开奖号即中奖"),
    (BET_TYPE.SEVEN_ANY, u"至少选7个号，选号包含5个开奖号即中奖"),
    (BET_TYPE.EIGHT_ANY, u"至少选8个号，选号包含5个开奖号即中奖"),
    (BET_TYPE.ONE_FRONT, u"至少选1个号，猜对第1个开奖号即中奖"),
    (BET_TYPE.TWO_FRONT_DIRECT, u"每位至少选1个号（不能相同），按位猜对开奖号前2位中奖"),
    (BET_TYPE.TWO_FRONT_GROUP, u"至少选2个号，猜对前2个开奖号即中奖"),
    (BET_TYPE.THREE_FRONT_DIRECT, u"每位至少选1个号（不能相同），按位猜对开奖号前3位中奖"),
    (BET_TYPE.THREE_FRONT_GROUP, u"至少选3个号，猜对前3个开奖号即中奖"),
)

BET_TYPE_DESC_V4 = {
    BET_TYPE.TWO_ANY: u"至少选2个号，猜对任意2个开奖号即中奖",
    BET_TYPE.THREE_ANY: u"至少选3个号，猜对任意3个开奖号即中奖",
    BET_TYPE.FOUR_ANY: u"至少选4个号，猜对任意4个开奖号即中奖",
    BET_TYPE.FIVE_ANY: u"至少选5个号，猜对全部5个开奖号即中奖",
    BET_TYPE.SIX_ANY: u"至少选6个号，选号包含5个开奖号即中奖",
    BET_TYPE.SEVEN_ANY: u"至少选7个号，选号包含5个开奖号即中奖",
    BET_TYPE.EIGHT_ANY: u"至少选8个号，选号包含5个开奖号即中奖",
    BET_TYPE.ONE_FRONT: u"至少选1个号，猜对第1个开奖号即中奖",
    BET_TYPE.TWO_FRONT_DIRECT: u"每位至少选1个号（不能相同），按位猜对开奖号前2位中奖",
    BET_TYPE.TWO_FRONT_GROUP: u"至少选2个号，猜对前2个开奖号即中奖",
    BET_TYPE.THREE_FRONT_DIRECT: u"每位至少选1个号（不能相同），按位猜对开奖号前3位中奖",
    BET_TYPE.THREE_FRONT_GROUP: u"至少选3个号，猜对前3个开奖号即中奖",
}

X5_BET_CATEGORY = Enum({
    'ONE_FOUR': (1L, u'任2-4'),
    'FIVE_EIGHT': (2L, u'任5-8'),
    'FRONT_ONE': (3L, u'前一'),
    'FRONT_TWO': (4L, u'前二'),
    'FRONT_THREE': (5L, u'前三'),
    'GROUP': (6L, u'组选'),
})

X5_BET_CATEGORY_TYPE = [
    (X5_BET_CATEGORY.ONE_FOUR, [BET_TYPE.TWO_ANY, BET_TYPE.THREE_ANY, BET_TYPE.FOUR_ANY, ]),
    (X5_BET_CATEGORY.FIVE_EIGHT, [BET_TYPE.FIVE_ANY, BET_TYPE.SIX_ANY, BET_TYPE.SEVEN_ANY, BET_TYPE.EIGHT_ANY, ]),
    (X5_BET_CATEGORY.FRONT_ONE, [BET_TYPE.ONE_FRONT, ]),
    (X5_BET_CATEGORY.FRONT_TWO, [BET_TYPE.TWO_FRONT_DIRECT, ]),
    (X5_BET_CATEGORY.FRONT_THREE, [BET_TYPE.THREE_FRONT_DIRECT, ]),
    (X5_BET_CATEGORY.GROUP, [BET_TYPE.TWO_FRONT_GROUP, BET_TYPE.THREE_FRONT_GROUP, ]),
]


def get_available_bet_type_v3():
    _list = []
    for index, (bet_type, desc) in enumerate(BET_TYPE_DESC_V3):
        _list.append({
            "id": index + 1,
            "title": BET_TYPE.get_label(bet_type),
            "play_id": bet_type,
            "des": desc,
            "rule": "",
            "support": 1
        })
    return _list


def get_available_bet_type_v4():
    _list = []
    for category, bet_types in X5_BET_CATEGORY_TYPE:
        type_list = []
        _id = 1
        for bet_type in bet_types:
            type_list.append({
                'id': _id,
                'title': BET_TYPE.get_label(bet_type),
                'play_id': bet_type,
                'des': BET_TYPE_DESC_V4[bet_type],
                'rule': '',
                'support': 1
            })
            _id += 1
        data = {
            'id': category,
            'title': X5_BET_CATEGORY.get_label(category),
            'support': 1,
            'list': type_list
        }
        _list.append(data)
    return _list
